package org.dromara.admin.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 通用审核状态
 * 平台审核状态: PENDING(待审核), APPROVED(已审核), REJECTED(拒绝), REJECTED_REASSIGN(驳回（资方审核拒绝后，可以驳回重新分配资方）)
 * 资方审核状态: PENDING(待审核), APPROVED(通过), REJECTED(拒绝)
 */
@Getter
@AllArgsConstructor
public enum AuditStatus {

    PENDING("PENDING", "待审核"),
    APPROVED("APPROVED", "通过"),
    REJECTED("REJECTED", "拒绝"),
    /**
     * 资方审核拒绝后，可以驳回重新分配资方
     */
    REJECTED_REASSIGN("REJECTED_REASSIGN", "驳回重新分配"),

    /**
     * 逾期
     */
    Y("Y", "是"),
    N("N", "否");


    private final String code;
    private final String info;

    /**
     * 根据code代码获取枚举类型
     *
     * @param code 代码（如："PENDING"）
     * @return 对应的枚举类型
     * @throws IllegalArgumentException 如果找不到匹配的枚举类型
     */
    public static AuditStatus getByCode(String code) {
        for (AuditStatus type : values()) {
            if (type.getCode().equalsIgnoreCase(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的类型代码: " + code);
    }

    /**
     * 根据info信息获取枚举类型
     *
     * @param info 类型信息（如："审核中"）
     * @return 对应的枚举类型
     * @throws IllegalArgumentException 如果找不到匹配的枚举类型
     */
    public static AuditStatus getByInfo(String info) {
        for (AuditStatus type : values()) {
            if (type.getInfo().equals(info)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的类型: " + info);
    }
}
